/**
 * 
 */
package com.yidin.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.Gallery;

/**
 * 要求在Gallery中每次滑动最多显示一页。解决方法是重载onfling函数。
有两种方法，可以在onfling中检测X轴的速度，如果大于一定值，将其减少为只能移动一页的速度。
但是这个滑动一页的速度比较难掌握，据我估计在500到700之间。
还有一种方法是直接调用gallery的setSelection来跳到下一页，但是这样做的缺点是没有了页间动画。
 * 
 * @author cola
 * 
 */
public class SlowGallery extends Gallery {

	public SlowGallery(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public SlowGallery(Context context, AttributeSet attrs) {

		super(context, attrs);

		// TODO Auto-generated constructor stub

	}

	public SlowGallery(Context context, AttributeSet attrs,

	int defStyle) {
		super(context, attrs, defStyle);

	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

	float velocityY) {

		// TODO Auto-generated method stub

		int kEvent;

		if (isScrollingLeft(e1, e2)) { // Check if scrolling left

			kEvent = KeyEvent.KEYCODE_DPAD_LEFT;

		}

		else { // Otherwise scrolling right

			kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;

		}

		onKeyDown(kEvent, null);

		return true;

	}

	private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {

		return e2.getX() > e1.getX();

	}
	
	//因为屏幕分辨率问题，检测速度是否大于一定值我的计算方法为
    // Convert the dips to pixels
//        float scale = getResources().getDisplayMetrics().density;
//        FLINGTHRESHOLD = (int) (20.0f * scale + 0.5f);
//
// //这是我的onFling函数：
//    public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//            Log.d("OnePageGallery:onFling:",String.format("VX:%f, VY:%f", velocityX, velocityY));
//            // cap the velocityX to scroll only one page
//            if (velocityX>FLINGTHRESHOLD) {
//                    return super.onFling(e1, e2, SPEED, velocityY);
//            } else if (velocityX<-FLINGTHRESHOLD) {
//                    return super.onFling(e1, e2, -SPEED, velocityY);
//            } else {
//                    return super.onFling(e1, e2, velocityX, velocityY);
//            }		
//    }

}
